#pragma once

#include "Functors\haydockmethod.h"
#include "Functors\kernelpolynomialmethod.h"
#include "Functors\densityofstates.h"
#include "variantExtensions.h"

#include <tbb/mutex.h>

class DensityOfStatesWrapper
{
	static const string biassymbol;
	static const string wavevectorsymbol;
	static const string etasymbol;
	static const string nsamplessymbol;
	static const string npolysymbol;
	static const string nrandsymbol;
	static const string nstatessymbol;
	static const string methodsymbol;
	static const string DMsymbol;
	static const string KPMsymbol;
	static const string HMsymbol;
	static const string progresssymbol;
	
	static tbb::mutex lock;

public:
	static void getDoS(int id);
	
	static Hamiltonian getHWithParameters(const rule::list &opts);
	static DensityOfStates getDOSWithParameters(const rule::list &opts);
	static KernelPolynomialMethod getKPMWithParameters(const rule::list &opts);
	static HaydockMethod getHMWithParameters(const rule::list &opts);
	
	static bool MLSetProgress(MLINK mlp, const char* var, double val);
	static bool MLAddToProgress(MLINK mlp, const char* var, double val);
};

